리액트에서 Error Handling

ErrorBoundary라는 클래스형 컴포넌트를 만들고, 에러가 발생할 수 있는 자식 컴포넌트(Child를 감싸주면, 자식 컴포넌트에서 예외가 발생했을 때, 예외를 캐치하여 Fallback 컴포넌트에 정의된 동작으로 넘겨줄 수 있다. (일종의 리액트 컴포넌트에서 사용 가능한 tray-catch 구문이라고 생각하면 편함)

<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="root"></div>
    <script
      crossorigin
      src="https://unpkg.com/react@18/umd/react.development.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/@babel/standalone/babel.min.js"
    ></script>

    <script type="text/babel">
      const rootElement = document.getElementById("root");

      class ErrorBoundary extends React.Component {
        state = {error: null};
        static getDerivedStateFromError(error) {
            return {error}
        }

        render() {
            const { error } this = state;
            if (error) {
                return <this.props.fallback error={error} />;
            }

            return this.props.children;
        }
      }

      const Child = () => {
        throw new Error("Something wrong ... ");
        return <p>Child ...</p>
      }

      const Fallback = ({ error }) => {
        return <p>THERE is some ERROR ...</p>
      }

      const App = () => {
        return (
            <>
                <p>App</p>
                <ErrorBoundary fallback={Fallback}>
                    <Child />
                </ErrorBoundary>
            </>
        )
      }

      ReactDOM.render(<App />, rootElement);
    </script>
  </body>
</html>